home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
tools
/
xb
/
fncsrc
/
raster.has
< prev
next >
Wrap
Text File
|
1995-08-22
|
18KB
|
1,112 lines
.include doscall.mac
.include iocscall.mac
.include fefunc.h
.include fdef.h
CRTC_R09 equ $e80012
TEXT_scroll_reg equ $e80014
GR0_scroll_reg equ $e80018
GR1_scroll_reg equ $e8001c
GR2_scroll_reg equ $e80020
GR3_scroll_reg equ $e80024
BG0_scroll_reg equ $eb0800
BG1_scroll_reg equ $eb0804
CRTC_R0 equ $e82400
CRTC_R1 equ $e82500
CRTC_R2 equ $e82600
MFP equ $e88000
MFP_IERA equ $e88007
MFP_IERB equ $e88009
MFP_IMRA equ $e88013
V_DISP_ADR equ $134
CRTC_RAS_ADR equ $138
H_SYNC_ADR equ $13c
* ZMUSIC -M : 多重割り込み対応
DIsuper .macro
suba.l a1,a1
IOCS _B_SUPER
move.l d0,-(sp)
ori.w #$0700,sr * 割り込み禁止
.endm
EIsuper .macro
andi.w #$f8ff,sr * 割り込み許可
movea.l (sp)+,a1
IOCS _B_SUPER
.endm
.text
.even
.dc.l init
.dc.l ret
.dc.l break_end
.dc.l exit
.dc.l break_end
.dc.l ret
.dc.l ret
.dc.l ret
.dc.l ptr_token
.dc.l ptr_param
.dc.l ptr_exec
.dc.l 0,0,0,0,0
ret:
rts
init:
DIsuper
cmpi.l #$1000000,V_DISP_ADR.w * V_DISP の割り込み先
bcs @f
* cmpi.l #$1000000,CRTC_RAS_ADR.w * CRTC-RAS の割り込み先
* bcs @f
cmpi.l #$1000000,H_SYNC_ADR.w * H-SYNC の割り込み先
bcs @f
move.l V_DISP_ADR.w,vdisp_bak
* move.l CRTC_RAS_ADR.w,crtcras_bak * 保存
move.l H_SYNC_ADR.w,hsync_bak
move.b MFP_IERB,mfp_ierb_bak
clr.w ras_flag * raster scroll でけまっせ
move.b #$0_1,$1f+MFP * 垂直帰線期間 & カウンタ1
move.l #$0003_ff00,d1 * PCM8(A) が常駐していれば、マスクの書き替え
bsr pcm8_check * thanks for philly さん
move.l d0,pcm8_mask
@@:
EIsuper
rts
break_end:
move.w ras_flag(pc),d0
bne exit_ret
move.w #-1,loop_num * 終わりの印
* move.w #-1,ras_screen * 終わりの印
DIsuper
lea.l MFP,a0
moveq #%0001_1111,d0 * H-SYNC, CRTC-RAS, V_DISP
* moveq #%0011_1111,d0 * H-SYNC, CRTC-RAS
and.b d0,7(a0) * 割り込み発生禁止
and.b d0,$13(a0) * 割り込み要求のマスク
move.b mfp_ierb_bak(pc),9(a0)
EIsuper
rts
exit:
move.w ras_flag(pc),d0
bne exit_ret
DIsuper
move.l vdisp_bak(pc),V_DISP_ADR.w
* move.l crtcras_bak(pc),CRTC_RAS_ADR.w * 復帰
move.l hsync_bak(pc),H_SYNC_ADR.w
move.b mfp_ierb_bak(pc),MFP_IERB
move.l pcm8_mask(pc),d1 * PCM8(A) が常駐していれば、マスクの復活
bsr pcm8_check * thanks for philly さん
EIsuper
exit_ret:
rts
ras_flag: .dc.w -1
vdisp_bak: .dc.l 0
crtcras_bak: .dc.l 0
hsync_bak: .dc.l 0
mfp_ierb_bak: .dc.b 0,0
pcm8_mask: .dc.l 0
pcm8_check:
movea.l $88.w,a0 * PCM8(A) 常駐チェック
cmpi.l #'PCM8',-8(a0)
bne @f
cmpi.b #'/',-4(a0)
bne @f
move.w #$01fb,d0 * MPU・MFPマスク設定
trap #2 * PCM8(A)ファンクションコール
@@:
rts
** ** ** ** ** ** ** ** ** **
ptr_token:
.dc.b 'ras_scroll_set',0
.dc.b 'ras_home',0
.dc.b 'ras_scroll_stat',0
.dc.b 'v_priority',0
.dc.b 'v_special',0
.dc.b 'v_disp',0
.dc.b 0
.even
ptr_param:
.dc.l p_ras_scroll_set
.dc.l p_ras_home
.dc.l p_ras_scroll_stat
.dc.l p_v_priority
.dc.l p_v_special
.dc.l p_v_disp
ptr_exec:
.dc.l e_ras_scroll_set
.dc.l e_ras_home
.dc.l e_ras_scroll_stat
.dc.l e_v_priority
.dc.l e_v_special
.dc.l e_v_disp
** ** ** ** ** ** ** ** ** **
p_v_priority:
.dc.w str_omt
.dc.w str_omt
.dc.w void_ret
e_v_priority:
tst.w par1(sp)
bmi v_pri_1
movea.l par1+6(sp),a0
lea.l v_pri_buf(pc),a2
moveq #-1,d2
move.l d2,(a2)
moveq #0,d2
1:
move.b (a0)+,d0
beq 2f
ori.b #$20,d0
moveq #0,d3
cmpi.b #'s',d0
beq @f
moveq #1,d3
cmpi.b #'t',d0
beq @f
moveq #2,d3
cmpi.b #'g',d0
bne para1_err
@@:
tst.b (a2,d3.w)
bge para1_err
move.b d2,(a2,d3.w)
3:
addq.w #1,d2
bra 1b
2:
subq.w #3,d2
bne para1_err
moveq #0,d1
moveq #2,d0
3:
lsl.w #2,d1
or.b (a2)+,d1
dbra d0,3b
lea.l CRTC_R1,a1
IOCS _B_BPOKE * CTRC_R1 に書き込み
v_pri_1:
tst.w par2(sp)
bmi v_pri_2
movea.l par2+6(sp),a0
lea.l v_pri_buf(pc),a2
moveq #-1,d2
move.l d2,(a2)
moveq #0,d2
lea.l CRTC_R0,a1
IOCS _B_WPEEK
and.w #$7,d0
moveq #0,d4
move.b _graph枚数(pc,d0.w),d4
ble v_pri_2 * グラフィックが1枚しかない時は無効
1:
moveq #0,d0
move.b (a0)+,d0
beq 2f
subi.b #'0',d0
bcs para2_err
cmp.b d4,d0
bhi para2_err
tst.b (a2,d0.w)
bge para2_err
move.b d2,(a2,d0.w) * d0 ページの優先順位は d2 (0-3)
addq.w #1,d2
bra 1b
2:
subq.w #1,d2
cmp.w d4,d2
bne para2_err
subq.w #1,d2
beq _v_pri_2pages
_v_pri_4pages:
moveq #0,d1
moveq #0,d2
3:
move.b (a2)+,d0
add.w d0,d0
move.b d2,d3
lsl.w d0,d3
or.b d3,d1
addq.w #1,d2
dbra d4,3b
bra page01
_v_pri_2pages:
move.b #%1110_0100,d1
cmpi.w #$00_01,(a2) * page0 > page1
beq page01
cmpi.w #$01_00,(a2) * page0 < page1
bne para2_err * そんなはずはないはず
move.b #%0100_1110,d1
page01:
lea.l CRTC_R1+1,a1
IOCS _B_BPOKE * CTRC_R1 に書き込み
v_pri_2:
bra return_zero
v_pri_buf:
.dc.l 0
_graph枚数:
.dc.b 4-1,2-1,0-1,1-1
.dc.b 1-1,1-1,1-1,1-1
.even
p_v_special:
.dc.w int_val
.dc.w int_ret
e_v_special:
move.l par1+6(sp),d1
bmi @f
cmpi.l #9,d1
bcc para0_err
suba.l a1,a1
IOCS _B_SUPER
movea.l d0,a1
lea.l CRTC_R2,a0
move.w (a0),d0
and.w #$80_ff,d0
add.w d1,d1
or.w _v_sp_table(pc,d1.w),d0
move.w d0,(a0)
IOCS _B_SUPER
moveq #0,d0
move.w _v_special(pc),d0
move.w par1+8(sp),_v_special
bra return_d0
@@:
moveq #0,d0
move.w _v_special(pc),d0
bra return_d0
_v_sp_table:
.dc.w $0000 * OFF
.dc.w $5c00 * TEXT PALET 0
.dc.w $1d00 * T/S/B
.dc.w $1e00 * G2
.dc.w $1f00 * T/S/B + G2
.dc.w $3d00 * T/S/B + TV/video
.dc.w $3e00 * G2 + TV/video
.dc.w $3f00 * T/S/B + G2 + TV/video
.dc.w $1400 * special priority
_v_special:
.dc.w 0 * status
p_v_disp:
.dc.w int_omt
.dc.w void_ret
e_v_disp:
suba.l a1,a1
IOCS _B_SUPER
move.l d0,a1
lea.l $e88001,a0
moveq #4,d0
tst.w par1(sp)
bmi 帰線待ち
tst.l par1+6(sp)
beq 帰線待ち
表示待ち:
@@:
btst.b d0,(a0) * 帰線待ち
bne @b
@@:
btst.b d0,(a0) * 表示待ち
beq @b
IOCS _B_SUPER
rts
帰線待ち:
@@:
btst.b d0,(a0) * 表示待ち
beq @b
@@:
btst.b d0,(a0) * 帰線待ち
bne @b
IOCS _B_SUPER
rts
** ** ** ** ** ** ** ** ** **
p_ras_scroll_set:
.dc.w int_val * 面 (0,1=BG0,1, 2,3,4,5=GRAPH0,1,2,3, 6=TEXT)
.dc.w $0072 * int型 1,2 次元配列 ras(n,d)
.dc.w int_omt * 最大ページ番号 (0,1,2,...,n)
.dc.w int_omt * 各ページのラスターの指定本数 - 1 (0,1,...,d)
.dc.w int_omt * スクロール開始ラスター
.dc.w int_ret
_v_disp_tbl:
.dc.l _v_disp0 * BG0 (X)
.dc.l _v_disp1 * BG1 (X)
.dc.l _v_disp2 * BG0 (XY)
.dc.l _v_disp3 * BG1 (XY)
.dc.l _v_disp4 * GRAPH 0
.dc.l _v_disp5 * TEXT
.dc.l _v_disp6 * BG0 (XY,diff)
.dc.l _v_disp7 * BG1 (XY,diff)
e_ras_scroll_set:
move.w ras_flag(pc),d0
bne no_ras_err
move.l par1+6(sp),d2 * 面
bmi irregal_screen
move.l d2,d0
subq.l #8,d0
bcc irregal_screen
move.w loop_num(pc),d0 * -1 : スクロール停止
bge 既にscroll * スクロール止めてからでないとダメ
move.w d2,ras_screen
* 垂直帰線割り込みアドレスセット
lsl.w #2,d2
movea.l _v_disp_tbl(pc,d2.w),a2
move.w ras_screen(pc),d0
subq.w #4,d0
bne @f
* GRAPHIC は 1/2/4 枚、65536色などなどで処理を分けないと
lea.l CRTC_R0,a1
IOCS _B_WPEEK
andi.w #$7,d0
subq.w #4,d0
bcc @f * GRAPH1024ならOK
lea.l 4+_graph枚数(pc),a0
move.b (a0,d0.w),d0
beq GRAPH65536
subq.b #1,d0
*beq GRAPH2枚
bne @f * GRAPH4枚ならOK
GRAPH2枚:
lea.l _v_dispG00(pc),a2
bra @f
GRAPH65536:
lea.l _v_dispG0000(pc),a2
@@:
lea.l V_DISP_ADR.w,a1
move.l a2,d1
IOCS _B_LPOKE
clr.l ras_home
movea.l par2+6(sp),a1 * page data の収められている配列
move.w 4(a1),d0 * 次元 -1
add.w d0,d0
move.w d0,d2
add.w d0,d0
add.w d2,d0 * 6n-6
lea.l 4+6(a1,d0.w),a0 * data 先頭
move.l a0,page_data
tst.w par3(sp)
bge 1f
tst.w d2
beq no_param
move.w 8(a1),d0 * 1つ目の添字の大きさ
bra 2f
1:
move.l par3+6(sp),d0 * 最大ページ番号 (0,1,2,...,n)
cmpi.l #$10000,d0
bcc para3_err
2:
move.w d0,max_page_num
tst.w par4(sp)
bge 1f
tst.w d2
beq no_param
move.w 10(a1),d1 * 2つ目の添字の大きさ
bra 2f
1:
move.l par4+6(sp),d1 * 各ページのラスターの指定本数 - 1 (0,1,...,d)
cmpi.l #$10000,d1
bcc para4_err
2:
move.w d1,page_raster_num
addq.l #1,d0
addq.l #1,d1
FPACK __UMUL
move.l d0,d3
moveq #0,d0
move.w 8(a1),d0 * (第一)添え字の大きさ
addq.l #1,d0
tst.w d2
beq @f
move.w 10(a1),d1
addq.l #1,d1
FPACK __UMUL
@@:
cmp.l d3,d0
bcs 指定大きすぎ
moveq #0,d0 * default
tst.w par5(sp)
bmi 1f
move.l par5+6(sp),d0 * スクロール開始ラスター
1:
move.w d0,start_raster
bra return_zero
既にscroll:
moveq #-2,d0
bra return_d0
ras_screen: .dc.w -1
page_data: .dc.l 0
max_page_num: .dc.w 0
ras_home: .dc.w 0,0
page_raster_num: .dc.w 0
start_raster: .dc.w 0
p_ras_home:
.dc.w int_val * X
.dc.w int_omt * Y
.dc.w void_ret
e_ras_home:
move.w ras_flag(pc),d0
bne no_ras_err
lea.l ras_home(pc),a0
move.w par1+8(sp),d0
move.w d0,(a0)+
tst.w par2(sp)
bmi @f
move.w par2+8(sp),d0
move.w d0,(a0)+
@@:
bra return_zero
p_ras_scroll_stat:
.dc.w int_val * command
.dc.w int_omt * the first page
.dc.w int_omt * the last page
.dc.w int_omt * loop numbers
.dc.w int_ret
e_ras_scroll_stat:
move.w ras_flag(pc),d0
bne no_ras_err
move.l par1+6(sp),d0 * command
beq scroll_stop
bmi return_stat
move.w ras_screen(pc),d0
bmi データ未セット
tst.w par2(sp)
bge 1f
moveq.l #0,d2 * default
bra 2f
1:
move.l par2+6(sp),d2 * the first page
2:
move.w page_raster_num(pc),d1
addq.w #1,d1
move.w d2,d0
mulu.w d1,d0
lsl.l #2,d0
movea.l page_data(pc),a0
adda.l d0,a0
move.w ras_screen(pc),d1
move.w #%00000000_11001100,d0
btst d1,d0
bne @f
addq.l #2,a0 ***
@@:
move.l a0,data0
tst.w par3(sp)
bge 1f
moveq.l #0,d0
move.w max_page_num(pc),d0 * default
bra 2f
1:
move.l par3+6(sp),d0 * the last page
cmpi.l #$10000,d0
bcc para3_err
cmp.w max_page_num(pc),d0
bhi para3_err
2:
sub.l d2,d0
bcs para2_err
move.w d0,page0
moveq.l #0,d0 * default
tst.w par4(sp)
bmi 1f
move.l par4+6(sp),d0 * loop numbers
bmi para4_err
1:
move.w loop_num(pc),d1
bmi ras_stat_init
tst.w d0
beq @f
addq.w #1,d0
@@:
move.w d0,loop_num
clr.w page
bra return_zero
no_ras_err:
moveq #-1,d0
bra return_d0
ras_stat_init:
move.w d0,loop_num
move.l data0,data
move.w page0,page
DIsuper
lea.l MFP,a0
moveq #$20,d0 * vdisp
andi.b #$ef,3(a0) * 垂直帰線期間で割り込み
or.b d0,7(a0) * vdisp 割り込み発生許可
or.b d0,$13(a0) * 割り込み要求のマスク解除
* moveq #$40,d0
** or.b d0,3(a0) * crtcras 1->0 で割り込み発生
* andi.b #$bf,3(a0) * crtcras 0->1 で割り込み発生
* or.b d0,7(a0) * crtcras 割り込み発生許可
* or.b d0,$13(a0) * 割り込み要求のマスク解除
* ori.b #$80,3(a0) * h-sync 1->0 で割り込み発生
* andi.b #$7f,3(a0) * h-sync 0->1 で割り込み発生
andi.b #$7f,7(a0) * h-sync 割り込み発生禁止
ori.b #$80,$13(a0) * 割り込み要求のマスクは解除
move.b #%00001110,9(a0) * timer C/D 割り込み禁止
EIsuper
bra return_zero
scroll_stop:
bsr break_end
bra return_zero
return_stat:
move.w loop_num(pc),d0
ext.l d0
bra return_d0
page0: .dc.w 0
data0: .dc.l 0
page: .dc.w 0
data: .dc.l 0
loop_num: .dc.w -1
ras: .dc.w 0
ras1: .dc.w 0
** ** ** ** ** ** ** ** ** **
_v_disp0:
ori.b #$80,MFP_IERA * h-sync 割り込み発生許可
move.l #__hsync0,H_SYNC_ADR.w
move.l page_raster_num(pc),ras * 1 page 当たりのラスタ本数 - 1
* move.w start_raster(pc),ras1
move.l ras_home(pc),BG0_scroll_reg
rte
_v_disp1:
ori.b #$80,MFP_IERA
move.l #__hsync1,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),BG1_scroll_reg
rte
_v_disp2:
ori.b #$80,MFP_IERA
move.l #__hsync2,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),BG0_scroll_reg
rte
_v_disp3:
ori.b #$80,MFP_IERA
move.l #__hsync3,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),BG1_scroll_reg
rte
_v_disp4:
ori.b #$80,MFP_IERA
move.l #__hsync4,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),GR0_scroll_reg
rte
_v_disp5:
ori.b #$80,MFP_IERA
move.l #__hsync5,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),TEXT_scroll_reg
rte
_v_disp6:
ori.b #$80,MFP_IERA
move.l #__hsync6,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),BG0_scroll_reg
rte
_v_disp7:
ori.b #$80,MFP_IERA
move.l #__hsync7,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),BG1_scroll_reg
rte
_v_dispG0000:
ori.b #$80,MFP_IERA
move.l #__hsyncG0000,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),GR0_scroll_reg
move.l ras_home(pc),GR1_scroll_reg
move.l ras_home(pc),GR2_scroll_reg
move.l ras_home(pc),GR3_scroll_reg
rte
_v_dispG00:
ori.b #$80,MFP_IERA
move.l #__hsyncG00,H_SYNC_ADR.w
move.l page_raster_num(pc),ras
move.l ras_home(pc),GR0_scroll_reg
move.l ras_home(pc),GR1_scroll_reg
rte
* BG0 横
__hsync0:
subq.w #1,ras1
bcc @f
move.l #_hsync0,H_SYNC_ADR.w
_hsync0:
move.l a0,-(sp)
movea.l data(pc),a0
move.w (a0),BG0_scroll_reg
addq.l #4,a0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* BG1 横
__hsync1:
subq.w #1,ras1
bcc @f
move.l #_hsync1,H_SYNC_ADR.w
_hsync1:
move.l a0,-(sp)
movea.l data(pc),a0
move.w (a0),BG1_scroll_reg
addq.l #4,a0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* BG0 縦横
__hsync2:
subq.w #1,ras1
bcc @f
move.l #_hsync2,H_SYNC_ADR.w
_hsync2:
move.l a0,-(sp)
movea.l data(pc),a0
move.l (a0)+,BG0_scroll_reg
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* BG1 縦横
__hsync3:
subq.w #1,ras1
bcc @f
move.l #_hsync3,H_SYNC_ADR.w
_hsync3:
move.l a0,-(sp)
movea.l data(pc),a0
move.l (a0)+,BG1_scroll_reg
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* GR0
__hsync4:
subq.w #1,ras1
bcc @f
move.l #_hsync4,H_SYNC_ADR.w
_hsync4:
move.l a0,-(sp)
movea.l data(pc),a0
move.w (a0),GR0_scroll_reg
addq.l #4,a0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* TEXT
__hsync5:
subq.w #1,ras1
bcc @f
move.l #_hsync5,H_SYNC_ADR.w
_hsync5:
move.l a0,-(sp)
movea.l data(pc),a0
move.w (a0),TEXT_scroll_reg
addq.l #4,a0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* BG0 縦横 差分
__hsync6:
subq.w #1,ras1
bcc @f
move.l #_hsync6,H_SYNC_ADR.w
_hsync6:
movem.l d0/a0,-(sp)
movea.l data(pc),a0
move.l (a0)+,d0
add.l d0,BG0_scroll_reg * ここがポイント
move.l (sp)+,d0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* BG1 縦横 差分
__hsync7:
subq.w #1,ras1
bcc @f
move.l #_hsync7,H_SYNC_ADR.w
_hsync7:
movem.l d0/a0,-(sp)
movea.l data(pc),a0
move.l (a0)+,d0
add.l d0,BG1_scroll_reg * ここがポイント
move.l (sp)+,d0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* GR0000 (65536 colors mode)
__hsyncG0000:
subq.w #1,ras1
bcc @f
move.l #_hsyncG0000,H_SYNC_ADR.w
_hsyncG0000:
move.l a0,-(sp)
movea.l data(pc),a0
move.w (a0),GR0_scroll_reg
move.w (a0),GR1_scroll_reg
move.w (a0),GR2_scroll_reg
move.w (a0),GR3_scroll_reg
addq.l #4,a0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
* GR00 (256 colors mode)
__hsyncG00:
subq.w #1,ras1
bcc @f
move.l #_hsyncG00,H_SYNC_ADR.w
_hsyncG00:
move.l a0,-(sp)
movea.l data(pc),a0
move.w (a0),GR0_scroll_reg
move.w (a0),GR1_scroll_reg
addq.l #4,a0
move.l a0,data
lea.l ras(pc),a0
subq.w #1,(a0)
bcs _hsync_owari
movea.l (sp)+,a0
@@:
rte
_hsync_owari:
andi.b #$7f,MFP_IERA * h-sync 割り込み発生禁止
lea.l page(pc),a0
subq.w #1,(a0)
bcc @f
move.w page0(pc),(a0) * page
move.l data0(pc),data
lea.l loop_num(pc),a0
tst.w (a0)
beq @f
subq.w #1,(a0)
bne @f
move.w #-1,(a0) * 終わりの印
* move.w #-1,ras_screen * 終わりの印
* andi.b #$3f,MFP_IERA * crtcras 割り込み発生禁止
andi.b #$1f,MFP_IERA * vdisp以下の 割り込み発生禁止
@@:
movea.l (sp)+,a0
rte
*-----------------------------
return_zero:
moveq.l #0,d0
return_d0:
lea.l fac(pc),a0
move.l d0,6(a0)
moveq.l #0,d0
rts
*-----------------------------
fac:
.dc.w 0
.dc.l 0
.dc.l 0
*-----------------------------
para1_err:
moveq #'1',d0
bra @f
para2_err:
moveq #'2',d0
bra @f
para3_err:
moveq #'3',d0
bra @f
para4_err:
moveq #'4',d0
@@:
lea.l _para_err(pc),a1
move.b d0,(a1)
moveq #1,d0
rts
para0_err:
lea.l _para0_err(pc),a1
moveq #1,d0
rts
no_param:
lea.l _no_param(pc),a1
moveq #1,d0
rts
irregal_screen:
lea.l _irregal_screen(pc),a1
moveq #1,d0
rts
データ未セット:
lea.l _データ未セット(pc),a1
moveq #2,d0
rts
指定大きすぎ:
lea.l _指定大きすぎ(pc),a1
moveq #3,d0
rts
_para_err:
.dc.b ' 番目の'
_para0_err:
.dc.b 'パラメーターがおかしいです',0
_no_param:
.dc.b 'パラメーターがありません',0
_irregal_screen:
.dc.b 'スクリーンの指定が間違っています',0
_データ未セット:
.dc.b 'スクロールデータがまだ指定されていません',0
_指定大きすぎ:
.dc.b '配列の要素数より大きな値を指定してます',0
.even
*-----------------------------
.end